import router from "@/router"; // 导入路由实例
import { TabsState, TabsMenuProps } from "@/stores/interface"; // 导入标签页状态和属性类型
import piniaPersistConfig from "@/config/piniaPersist"; // 导入持久化配置

// 创建标签页状态管理store
export const useTabsStore = defineStore({
  id: "tabs", // store的唯一标识符
  
  // 定义状态
  state: (): TabsState => ({
    tabsMenuList: [] // 标签页菜单列表，初始为空数组
  }),
  
  // 定义操作标签页的方法
  actions: {
    // 添加标签页
    async addTabs(tabItem: TabsMenuProps) {
      // 检查标签页是否已存在（根据路径判断）
      if (this.tabsMenuList.every(item => item.path !== tabItem.path)) {
        // 如果不存在，则添加到列表
        this.tabsMenuList.push(tabItem);
      }
    },
    
    // 移除标签页
    async removeTabs(tabPath: string, isCurrent: boolean = true) {
      const tabsMenuList = this.tabsMenuList;
      
      // 如果移除的是当前激活的标签页
      if (isCurrent) {
        tabsMenuList.forEach((item, index) => {
          // 查找要移除的标签页
          if (item.path !== tabPath) return;
          
          // 找到相邻的标签页（下一个或上一个）
          const nextTab = tabsMenuList[index + 1] || tabsMenuList[index - 1];
          if (!nextTab) return;
          
          // 路由跳转到相邻标签页
          router.push(nextTab.path);
        });
      }
      
      // 过滤掉要移除的标签页
      this.tabsMenuList = tabsMenuList.filter(item => item.path !== tabPath);
    },
    
    // 关闭多个标签页
    async closeMultipleTab(tabsMenuValue?: string) {
      // 保留当前激活的标签页和不可关闭的标签页
      this.tabsMenuList = this.tabsMenuList.filter(item => {
        return item.path === tabsMenuValue || !item.close;
      });
    },
    
    // 设置标签页列表（覆盖原有）
    async setTabs(tabsMenuList: TabsMenuProps[]) {
      this.tabsMenuList = tabsMenuList;
    },
    
    // 设置标签页标题
    async setTabsTitle(title: string) {
      // 获取当前页面的完整路径（去掉hash符号）
      const nowFullPath = location.hash.substring(1);
      
      // 更新当前标签页的标题
      this.tabsMenuList.forEach(item => {
        if (item.path === nowFullPath) item.title = title;
      });
    }
  },
  
  // 持久化配置
  persist: piniaPersistConfig("tabs")
});